#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSortFilterProxyModel>
#include <QTableView>
#include <QPushButton>
#include <QComboBox>
#include <QDateEdit>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QHeaderView>
#include <QJsonObject>
#include <QTextStream>
#include "auditlogger.h"
#include <QMetaType>
#include "usersession.h"
#include "ui_mainwindow.h"
#include "databasehandler.h"

#include "usermanagementwidget.h"
#include "permissionmanager.h"
#include "dataexporter.h"
#include "pluginsystem.h"
#include <QTableWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    
    void showAboutDialog();

    // 初始化系统
    bool initializeSystem();

private slots:
    // 用户登录
    void onUserLogin(const QString &userId);
    // 用户登出
    void onUserLogout();
    // 刷新审计日志显示
    void refreshAuditLog();
    // 导出审计日志
    void exportAuditLog();
    // 应用查询过滤器
    void applyFilter();
    void handleDatabaseError(const QString &error);
    // 修改数值
    void onModifyValue();

private:
    QString auditActionToString(AuditLogger::ActionType action);
    void setupConnections();
    void initUI();
    void loadInitialData();
    
    // UI Controls
    QTableView *auditLogTableView;
    QPushButton *refreshButton;
    QPushButton *exportButton;
    QPushButton *filterButton;
    QPushButton *logoutButton;
    QDateEdit *dateFromEdit;
    QDateEdit *dateToEdit;
    QLineEdit *userFilterEdit;
    QComboBox *actionComboBox;
    QLineEdit *m_valueEdit;  // 新增数值编辑框

    AuditLogger *m_auditLogger;
    UserSession *m_userSession;
    QSortFilterProxyModel *m_proxyModel;
    Ui::MainWindow *ui;
    DatabaseHandler *m_dbHandler;

    // 初始化连接
    void initConnections();
    // 检查电子签名
    bool verifyElectronicSignature(const QString &action);
    
    // 用户管理相关
    void showUserManagement();
    UserManagementWidget *m_userManagementWidget;
    
    // 新增功能组件
    PermissionManager *m_permissionManager;
    DataExporter *m_dataExporter;
    PluginSystem *m_pluginSystem;
    
    // 新增功能方法
    void showPermissionManagement();
    void showExportDialog();
    void showPluginManager();
    bool checkUserPermission(Permission permission);
};

#endif // MAINWINDOW_H